package grafico.builder;

import contatos.model.Contato;
import grafico.strategy.IGraficoStrategy;
import java.util.TreeSet;
import javax.swing.JPanel;
import org.jfree.chart.ChartPanel;

/**
 *
 * @author felipe
 */
public  class GraficoOperadoraUfBuilder extends AbstractGraficoBuilder{

    private IGraficoStrategy strategy;

    //Este builder de grafico usa o padrão strategy, pois possiblita
    //gerar um gráfico de barras ou de colunas
    public GraficoOperadoraUfBuilder(TreeSet<Contato> contatos, IGraficoStrategy strategy) {
        super(contatos);
        this.strategy = strategy;
    }

    @Override
    public void gerarDataSet() {
        TreeSet<String> estados = new TreeSet<String>();
        TreeSet<String> operadoras = new TreeSet<String>();
        for (Contato contato : contatos) {
            estados.add(contato.getUf());
            operadoras.add(contato.getOperadora());
        }

        //gerando os dados de acordo com a uf
        int quantidadeOperadora = 0;
        for (String estado : estados) {
            for (String operadora : operadoras) {
                for (Contato contato : contatos) {
                    if (contato.getUf().equals(estado) && contato.getOperadora().equals(operadora)) {
                        quantidadeOperadora++;
                    }
                }
                dados.addValue(quantidadeOperadora, operadora, estado);
                quantidadeOperadora = 0;
            }
        }
    }

    @Override
    public void gerarGrafico() {
        this.grafico = strategy.gerarGrafico(dados);
    }
    
    @Override
    public JPanel getPanel() {
        return new ChartPanel(grafico);

    }
}
